package com.cn.wanxi.dao.impl;

import com.cn.wanxi.dao.IProductDao;
import com.cn.wanxi.model.ProductModel;
import com.cn.wanxi.util.GetSqlSession;
import redis.clients.jedis.Jedis;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class ProductDaoImpl implements IProductDao {
    private void clearProductRedis(){
        try {
            Jedis jedis = new Jedis();
            jedis.del("product_id");
            jedis.del("product_name");
            jedis.del("product_photo");
            jedis.del("product_user_type");
            jedis.del("product_type");
            jedis.del("product_price");
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    @Override
    public List<ProductModel> getProductList(Map<String, Object> map) {
        return GetSqlSession.getSqlSession().selectList("com.cn.wanxi.dao.IProductDao.getProductList",map);
    }

    @Override
    public ProductModel getProduct(int id) {
        return GetSqlSession.getSqlSession().selectOne("com.cn.wanxi.dao.IProductDao.getProduct",id);
    }

    @Override
    public int addProduct(ProductModel productModel) {
        clearProductRedis();
        return GetSqlSession.getSqlSession().insert("com.cn.wanxi.dao.IProductDao.addProduct",productModel);
    }

    @Override
    public int deleteProduct(int id) {
        clearProductRedis();
        return GetSqlSession.getSqlSession().update("com.cn.wanxi.dao.IProductDao.deleteProduct",id);
    }

    @Override
    public int updateProduct(ProductModel productModel) {
        clearProductRedis();
        return GetSqlSession.getSqlSession().update("com.cn.wanxi.dao.IProductDao.updateProduct",productModel);
    }


    @Override
    public List<ProductModel> getProducts(Map<String,Object> map) {
        return GetSqlSession.getSqlSession().selectList("com.cn.wanxi.dao.IProductDao.getProducts",map);
    }

    @Override
    public long getProductCount(Map<String,Object> map) {
        return GetSqlSession.getSqlSession().selectOne("com.cn.wanxi.dao.IProductDao.getProductCount",map);
    }

    @Override
    public int updateShow(ProductModel product) {
        clearProductRedis();
        return GetSqlSession.getSqlSession().update("com.cn.wanxi.dao.IProductDao.updateShow",product);
    }

    @Override
    public List<ProductModel> getProductListByRedis() {
        Jedis jedis = new Jedis();
        List<ProductModel> productList = new ArrayList<>();
        List<String> productId = jedis.lrange("product_id",0,-1);
        for (int i=0;i<productId.size();i++){
            ProductModel product = new ProductModel();
            product.setId(Integer.valueOf(productId.get(i)));
            product.setName(jedis.lindex("product_name",i));
            product.setPhoto(jedis.lindex("product_photo",i));
            product.setUserType(new UserTypeDaoImpl().getUserType(Integer.parseInt(jedis.lindex("product_user_type",i))));
            product.setProductType(new ProductTypeDaoImpl().getProductType(Integer.parseInt(jedis.lindex("product_type",i))));
            product.setPrice(new BigDecimal(jedis.lindex("product_price",i)));
            productList.add(product);
        }
        return productList;
    }

    @Override
    public void setProductListInRedis(List<ProductModel> list) {
        Jedis jedis = new Jedis();
        for (ProductModel product:list){
            jedis.rpush("product_id", String.valueOf(product.getId()));
            jedis.rpush("product_name",product.getName());
            jedis.rpush("product_photo",product.getPhoto());
            jedis.rpush("product_user_type", String.valueOf(product.getUserType().getId()));
            jedis.rpush("product_type", String.valueOf(product.getProductType().getId()));
            jedis.rpush("product_price", String.valueOf(product.getPrice()));
        }
    }
}
